Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 << zurück
Visual C# 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2005

Visual C# 2005
1.320 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-586-X
gp Kapitel 16 Die wichtigsten Steuerelemente
  gp 16.1 Gemeinsame Eigenschaften, Methoden und Ereignisse
    gp 16.1.1 Größe und Position
    gp 16.1.2 Die Sichtbarkeit und der Aktivierungszustand
    gp 16.1.3 Die Eigenschaft »Text«
    gp 16.1.4 Die Farbeigenschaften
    gp 16.1.5 Grafische Darstellung
    gp 16.1.6 Die »Modifiers«-Eigenschaft
    gp 16.1.7 Die Eigenschaft »Tag«
    gp 16.1.8 Die Größe von Steuerelementen dynamisch der Formgröße anpassen
    gp 16.1.9 Die »Dock«-Eigenschaft
    gp 16.1.10 Die z-Reihenfolge
    gp 16.1.11 Die Tabulatorreihenfolge
    gp 16.1.12 Steuerelemente fokussieren
    gp 16.1.13 Maus- und Tastaturereignisse
  gp 16.2 Schaltflächen der Klasse »Button«
    gp 16.2.1 Die Rahmendarstellung einer Schaltfläche
    gp 16.2.2 Die Eigenschaft »FlatAppearance«
    gp 16.2.3 Beschriftung und Grafiken
    gp 16.2.4 Weitere Gestaltungsmöglichkeiten
  gp 16.3 Auswahlkästchen mit der Klasse »CheckBox«
    gp 16.3.1 Eigenschaften eines Kontrollkästchens
    gp 16.3.2 Checkboxen mit drei Aktivierungszuständen
  gp 16.4 Die Klasse »RadioButton« (Optionsschaltflächen)
    gp 16.4.1 Die Gruppierung der Optionsschaltflächen
    gp 16.4.2 Die Eigenschaften von Optionsschaltflächen
    gp 16.4.3 Den Zustandswechsel programmieren
  gp 16.5 Die »GroupBox« als übergeordneter Container
  gp 16.6 Texteingabefelder mit der Klasse »TextBox«
    gp 16.6.1 Einzeilige Eingabefelder
    gp 16.6.2 Mehrzeilige Eingabefelder
  gp 16.7 Das Steuerelement »RichTextBox«
  gp 16.8 Beschriftungen mit dem Steuerelement »Label«
  gp 16.9 Das »LinkLabel«-Steuerelement
  gp 16.10 Die Anzeige eines Quickinfo-Texts
    gp 16.10.1 Methoden des »ToolTip«-Steuerelements
    gp 16.10.2 Aktivierungsdauer des »QuickInfo«-Steuerelements
    gp 16.10.3 Weitere Eigenschaften
  gp 16.11 Das »ListBox«-Steuerelement
    gp 16.11.1 Die Auflistung »ListBox.ObjectCollection«
    gp 16.11.2 Eigenschaften zur Darstellung einer Listbox
    gp 16.11.3 Einfach- und Mehrfachauswahl der Listenelemente
    gp 16.11.4 Programmatischer Zugriff auf Listboxen mit Einfachauswahl
    gp 16.11.5 Benutzerdefiniertes Sortieren der Listenelemente
    gp 16.11.6 Füllen einer Listbox mit »DataSource«
  gp 16.12 Das Steuerelement »CheckedListBox«
  gp 16.13 Die »ComboBox« (Kombinationslistenfeld)
    gp 16.13.1 Ereignisse eines Kombinationslistenfeldes
    gp 16.13.2 Autovervollständigung in einer »ComboBox«


Galileo Computing

16.6 Texteingabefelder mit der Klasse »TextBox«  downtop

Texteingabefelder basieren auf Instanzen der Klasse TextBox, die aus der abstrakten Klasse TextBoxBase abgeleitet ist, und lassen sich in zwei Gruppen kategorisieren:

gp  einzeilige Eingabefelder
gp  mehrzeilige Eingabefelder

Beiden ist ein besonderes Merkmal eigen: Die in einem Texteingabefeld angezeigte Zeichenfolge ist immer von derselben Schriftart, -darstellung und -größe. Der MS Editor ist ein Programm, von dem wir dieses Verhalten kennen. Der gesamte Arbeitsbereich des Formulars wird bei diesem Tool von einem mehrzeiligen Eingabefeld in Anspruch genommen.

Von der abstrakten Klasse TextBoxBase ist noch eine weitere Klasse abgeleitet: RichTextBox. Objekte dieses Typs bieten deutlich komfortablere Darstellungsmöglichkeiten, denn sie sind mit einem Word-Dokument vergleichbar. Hier sind Sie nicht mehr auf eine Schriftdarstellung fixiert, sondern können innerhalb der Komponente den Schriftstil beliebig wechseln.


Galileo Computing

16.6.1 Einzeilige Eingabefelder  downtop

Widmen wir uns zunächst den einzeiligen Eingabefeldern. Ohne Zweifel dürfte die wichtigste Eigenschaft diejenige sein, welche die anzuzeigende Zeichenfolge enthält. Inzwischen dürften Sie wissen, dass es sich hierbei um Text handelt.

Standardmäßig wird die Zeichenfolge am linken Rand des Steuerelements ausgerichtet, kann allerdings auch mit der Eigenschaft TextAlign mittig oder rechts in der Textbox angezeigt werden. Die vorgegebenen Werte sind in HorizontalAlignment beschrieben.


Tabelle 16.6   Mitglieder der Enumeration »HorizontalAlignment«

Member Beschreibung
Center Die Zeichenfolge wird in der Textbox zentral angezeigt.
Left Die Zeichenfolge wird in der Textbox linksbündig angezeigt.
Right Die Zeichenfolge wird in der Textbox rechtsbündig angezeigt.

Die Anzahl der Zeichen, die in eine Textbox eingegeben werden dürfen, lässt sich mit der Eigenschaft MaxLength beschränken. Interessiert die Länge des aktuellen Inhalts, wertet man die schreibgeschützte Eigenschaft TextLength aus.

Wenn Sie eine Textbox aus der Toolbox in die Arbeitsfläche des Formulars ziehen und versuchen, die Höhe der Textbox manuell einzustellen, werden Sie die Feststellung machen, dass sich diese Größe unter Zuhilfenahme der Markierungspunkte nicht verändern lässt. Standardmäßig passt sich die Höhe einer Textbox immer der eingestellten Schriftgröße an, die normalerweise 8,25 Punkte beträgt. Ändern Sie die Schriftgröße, ändert sich die Höhe der Textbox automatisch. Dieses Verhalten ist insbesondere dann inakzeptabel, wenn zur Laufzeit die Schriftgröße durch den Anwender verändert werden kann. Im schlimmsten Fall überdeckt die Textbox dann ein anderes Steuerelement.

Die Ursache für dieses Verhalten ist die Eigenschaft AutoSize. Diese gibt mit dem Standardwert true an, dass die Höhe des Steuerelements automatisch angepasst wird, wenn die dem Steuerelement zugewiesene Schriftgröße geändert wird. Wollen Sie die Höhe der Textbox dennoch manuell festlegen, legen Sie die AutoSize-Eigenschaft auf false fest.


Hinweis   AutoSize wird nicht im Eigenschaftsfenster angezeigt. Die Folge ist, dass Sie die Einstellung nur per Code vornehmen können. In der Dokumentation zu dieser Eigenschaft wird gesagt, dass AutoSize für das TextBox-Control nicht relevant sei. Dieser Aussage kann ich mich nicht anschließen, denn es sind durchaus auch Anwendungsfälle denkbar, in der AutoSize=false unverzichtbar ist.

Viele Anwendungen verlangen beim Start die Anmeldung des Benutzers, zu der auch die Eingabe des Passwortes gehört, das auf keinen Fall in einem lesbaren Klartext in der Textbox angezeigt werden darf. Mit der Eigenschaft PasswordChar können Sie die Eingabe mit einem anzugebenden Zeichen maskieren. Um zum Beispiel das häufig verwendete Zeichen »*« als Maskierung zu verwenden, sieht die Zuweisung, die natürlich auch im Eigenschaftsfenster der Textbox erfolgen kann, folgendermaßen aus:


textBox1.PasswordChar = '*';

Eine andere Auswirkung hat CharacterCasing vom Typ der gleichnamigen Enumeration, die manchmal auch in Zusammenhang mit Textfeldern eingesetzt wird, in denen Kennwörter eingegeben werden. Mit dieser Eigenschaft kann festgelegt werden, ob die Eingabe der Groß- und Kleinschreibung beibehalten oder in Groß- oder Kleinbuchstaben konvertiert wird. Die Enumeration CharacterCasing bietet drei Werte an:


Tabelle 16.7   Konstanten der Enumeration »CharacterCasing«

Member Beschreibung
Normal Die Groß- oder Kleinschreibung von Zeichen bleibt unverändert.
Lower Konvertiert alle Zeichen in Kleinbuchstaben.
Upper Konvertiert alle Zeichen in Großbuchstaben.

Manche Textfelder dienen weniger der Eingabe, sondern sollen vielmehr dem Benutzer Dateninformationen anzeigen, die dieser nicht ändern darf. Solche Textfelder sind schreibgeschützt. Sie können ein schreibgeschütztes Textfeld anbieten, indem Sie es mit der Eigenschaft Enabled deaktivieren. Die Einstellung dazu ist false. Das Textfeld ist dann nicht mehr fokussierbar und wird in hellgrauer Hintergrundfarbe angezeigt, die Schriftfarbe ist dunkelgrau. Ein Nachteil ist allerdings, dass es dem Anwender versagt bleibt, den Inhalt eines deaktivierten Textfeldes zu markieren und in die Zwischenablage zu kopieren.

Abhilfe schafft die Eigenschaft ReadOnly. Legen Sie diese auf true fest, ist das Textfeld zwar schreibgeschützt, andererseits bleibt es weiterhin fokussierbar. Weil ein ReadOnly-Textfeld die Einfügemarke annimmt, kann auch die darin enthaltene Information markiert und in die Zwischenablage kopiert werden.

Arbeiten mit ausgewähltem Text

In einem Textfeld kann die gesamte oder ein Teil der Zeichenfolge markiert werden, beispielsweise um den markierten Text zu kopieren oder auszuschneiden. Dabei sind drei Eigenschaften eines TextBox-Objekts von Bedeutung: SelectionStart, SelectionLength und SelectedText.

Sehen wir uns zunächst die Definition der zuerst angeführten Eigenschaft an:


public int SelectionStart {get; set;}

Der Rückgabewert ist ein Integer, der die Startposition der markierten Auswahl beschreibt. Für die Interpretation der Zahl können Sie sich den folgenden Satz merken:


SelectionStart liefert eine Zahl zurück, welche die Position des vorhergehenden Zeichens in der Zeichenfolge beschreibt.

Nehmen wir an, es wäre die Zeichenfolge »Visual Studio« in einer Textbox eingetragen und darin der Teilstring »sual« markiert. SelectionStart würde uns die Zahl 2 zurückgeben, da der markierte Teilstring nach dem zweiten Zeichen beginnt. Es muss aber nicht unbedingt ein Zeichen markiert sein, denn das Auswerten dieser Eigenschaft liefert grundsätzlich immer die Position der Einfügemarke zurück, wenn die Textbox fokussiert ist. SelectionStart ist keine schreibgeschützte Eigenschaft und kann daher auch zum Positionieren der Einfügemarke benutzt werden, solange die Eigenschaft SelectionLength, welche die Anzahl der markierten Zeichen zurückgibt, den Wert 0 hat.

Wollen Sie programmgesteuert einen bestimmten Teil einer Zeichenfolge markieren, müssen Sie sowohl SelectionStart als auch SelectionLength die passenden Werte übergeben. Die Eigenschaft SelectedText liefert schließlich den markierten Teilstring aus dem Steuerelement:

Im Beispiel SelectedTextDemo werden alle drei Eigenschaften exemplarisch eingesetzt. Die Abbildung 16.8 zeigt die grafische Benutzeroberfläche des Beispiels. Im obersten Eingabefeld wird nach dem Start eine Zeichenfolge angezeigt. Wird auf die Schaltfläche Text kopieren geklickt, wird der markierte Teilstring der oberen Textbox in die darunter liegende kopiert.

Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 16.8   Eingabemaske des Beispiels »SelectedTextDemo«

Der Rahmen Text markieren, dem eine GroupBox zugrunde liegt, dient diesmal nicht dazu, Container von Optionsschaltflächen zu sein. Sie gruppiert vielmehr zwei Textfelder, die in logischem Zusammenhang stehen, und schafft damit eine optische Gliederung der Eingabemaske für den Benutzer. In den beiden Textboxen kann die Startposition sowie die Länge bestimmt werden, mit der in der obersten Textbox ein Teilstring markiert wird. Enthalten beide Textboxen in der Groupbox einen gültigen Wert, wird auch die Schaltfläche Text markieren aktiviert. Wenn Sie diese Schaltfläche anklicken, wird der leere Ausgangszustand in den beiden Eingabefeldern des Rahmens wiederhergestellt und die Schaltfläche deaktiviert.

Sehen wir uns nun den Programmcode an, der von uns zur Erfüllung der Funktionalität codiert werden muss.


// ---------------------------------------------------------
// Beispiel: ...\Kapitel 16\SelectedTextDemo
// ---------------------------------------------------------
// Schaltfläche 'Text kopieren'
private void btnCopy_Click(object sender, EventArgs e) {
  MessageBox.Show("SelectionStart = " + 
            Convert.ToString(txtOriginal.SelectionStart +                  
            "\nSelectionLength = " + 
            Convert.ToString(txtOriginal.SelectionLength)));
  txtCopy.Text = txtOriginal.SelectedText;
  txtOriginal.Focus();
}
// Schaltfläche 'Text markieren'
private void btnSelect_Click(object sender, EventArgs e) {
  txtOriginal.SelectionStart = Convert.ToInt32(txtStart.Text);
  txtOriginal.SelectionLength = Convert.ToInt32(txtLength.Text);
  txtStart.Text = "";
  txtLength.Text = "";
  btnSelect.Enabled = false;
  txtOriginal.Focus();
}
// Ereignishandler des TextChanged-Ereignisses der 
// beiden Textboxen txtStart und txtLength
private void SelectText(object sender, EventArgs e) {
  if (txtStart.Text == "" || txtLength.Text == "")
    btnSelect.Enabled = false;
  else
    btnSelect.Enabled = true;
}

Im Ereignishandler btnCopy_Click lassen wir aus informativen Gründen zuerst in einer Messagebox die Startposition und die Länge des in der obersten Textbox markierten Teilstrings ausgeben. Erst danach leistet der Handler seine eigentliche Aufgabe und kopiert den markierten Teil der Zeichenfolge mit


txtCopy.Text = txtOriginal.SelectedText;

in das zweite Eingabefeld.

Die Eigenschaft Enabled der Schaltfläche Text markieren ist im Eigenschaftsfenster auf false gesetzt. Wenn die Anwendung gestartet wird, ist diese Schaltfläche also deaktiviert. Es ist nur dann sinnvoll, sie zu aktivieren, wenn in den beiden Textboxen der GroupBox ein gültiger Wert enthalten ist. Daher muss ein Weg gefunden werden, der es uns ermöglicht, das zu überprüfen. Es bietet sich dazu das Ereignis TextChanged des TextBox-Objekts an, das immer dann ausgelöst wird, wenn sich der Inhalt der Eigenschaft Text ändert.

Da die Überprüfung in den TextChanged-Ereignissen der beiden Eingabefelder identisch ist, reicht ein Ereignishandler zur Behandlung beider Ereignisse aus. Die entsprechende Einstellung kann im Eigenschaftsfenster vorgenommen werden, wenn man sich in der rechten Spalte die Liste alle passenden Ereignisse anzeigen lässt. Der Ereignishandler im Beispiel ist mit SelectText bezeichnet.

Jedes Mal, wenn sich der Inhalt einer der beiden Textboxen im Rahmen ändert, muss geprüft werden, ob in diesem Augenblick beide einen Inhalt aufweisen:


if (txtStart.Text == "" || txtLength.Text == "")
  btnSelect.Enabled = false;
else
  btnSelect.Enabled = true;

Nur dann, wenn beide Textboxen nicht leer sind, wird die Schaltfläche Text markieren aktiviert.

Im Ereignishandler des Click-Ereignisses der Schaltfläche Text markieren muss die Eingabe der Startposition und der Markierungslänge aus den Eingabefeldern zuerst in einen Integer konvertiert werden. Da sich der übliche Konvertierungsoperator dazu nicht eignet, greifen wir auf die Methode ToInt32 der Klasse Convert zurück. Beide Rückgabewerte werden der entsprechenden Eigenschaft des oberen Eingabefeldes zugewiesen, anschließend werden die Inhalte der Textboxen im Rahmen geleert.

Zum Schluss dürfen wir die alles entscheidende Anweisung nicht vergessen: Solange die Textbox nicht den Fokus hat, werden wir auch keinen markierten Text sehen. Wir müssen diesen demnach unserer Textbox ausdrücklich übergeben. Dazu dient die Methode Focus.

Prüfen, ob sich der Inhalt einer Textbox geändert hat

Als ausgesprochen nützlich kann sich die Eigenschaft Modified erweisen, die als boolescher Wert die Information darüber liefert, ob sich der Inhalt einer Textbox geändert hat. Wird eine Textbox neu erstellt, wird diese Eigenschaft mit false initialisiert. Ändert der Anwender durch eine Eingabe den Inhalt der Textbox, setzt die Textbox Modified auf true. Man kann diese Information beispielsweise dazu benutzen, um die Frage zu klären, ob der Inhalt eines Textfeldes in einer Datei gespeichert werden muss oder nicht. Allerdings darf man auch nicht vergessen, die Eigenschaft nach der Verarbeitung der Änderung manuell wieder auf false zurückzusetzen, denn das passiert nicht automatisch.

Automatische Vervollständigung

Was mit dem .NET Framework 1.0/1.1 noch das mühevolle Schreiben von Code verursachte, ist nun als neues Feature der TextBox und auch der ComboBox, der wir uns später noch widmen, sofort »eingebaut«: die Autovervollständigung. Dieses altbekannte, aber für die beiden Steuerelemente neue Verhalten unterstützt den Benutzer bei seinen Eingaben, in dem es aus einer Liste den nächsten passenden Eintrag sucht und die Benutzereingabe nach rechts um einem Vorschlag erweitert.

Nur drei Eigenschaften bewirken die Autovervollständigung:

gp  AutoCompleteCustomSource
gp  AutoCompleteMode
gp  AutoCompleteSource

Die Autovervollständigung setzt zunächst voraus, dass AutoCompleteMode auf einen Wert, der nicht None ist, eingestellt wird. Dazu stehen Ihnen die Konstanten der Enumeration AutoCompleteMode zur Verfügung, die Sie der folgenden Tabelle entnehmen können.


Tabelle 16.8   Die Mitglieder der Enumeration »AutoCompleteMode«

Konstante Beschreibung
Append Hängt das passendste Listenelement der aktuellen Benutzereingabe an und markiert die angehängte Zeichenfolge.
None Die Autovervollständigung ist abgeschaltet (Standardeinstellung).
Suggest Öffnet eine Liste aller passenden Kandidaten, aus welcher der Benutzer mit den Pfeiltasten einen Eintrag auswählen kann.
SuggestAppend Berücksichtigt die beiden Optionen Append und Suggest gleichermaßen.

In Abbildung 16.9 zeigt die Unterschiede zwischen den drei Konstanten zur Laufzeit.

Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 16.9   Darstellung der Autovervollständigung, abhängig von der Einstellung »AutoCompleteMode«

Es stellt sich natürlich die Frage, aus welcher Liste die Informationen bezogen werden, aus denen der Anwender gegebenenfalls seine Wahl treffen kann. Hier entscheidet die Einstellung der Eigenschaft AutoCompleteSource, die auf einer gleichnamigen Enumeration ihrer Werte basiert. Je nachdem, was im Eingabefeld eingetragen werden soll, können Sie auf verschiedene interne Systemlisten zurückgreifen, beispielsweise auf HistoryList, Filesystem oder AllUrl.

Eine weitere Alternative ist die Einstellung CustomSource, um eine eigene Liste zur Verfügung zu stellen. Diese kann bereits zur Entwicklungszeit gefüllt werden, aber auch dynamisch zur Laufzeit. Die selbst definierte Liste wird durch die dritte Eigenschaft im Bunde, AutoCompleteCustomSource, beschrieben. Im Eigenschaftsfenster brauchen Sie nur auf die Schaltfläche in der Wertespalte zu klicken, um in dem sich daraufhin öffnenden Dialog die Listenelemente einzutragen (siehe Abbildung 16.10).

Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 16.10   Benutzerdefinierte Liste für die Autovervollständigung

AutoCompleteCustomSource liefert die Referenz auf eine Collection vom Typ AutoCompleteStringCollection. Wollen Sie die Liste zur Laufzeit füllen oder bestehende Einträge ergänzen, stehen Ihnen die üblichen Methoden Add und AddRange nebst allen anderen zur vollständigen Verwaltung der gesamten Auflistung zur Verfügung (Remove, Insert usw.).

Zusammenfassung der Eigenschaften des einzeiligen Textfeldes

Fassen wir an dieser Stelle in übersichtlicher Form die Eigenschaften zusammen, die kennzeichnend für eine Textbox sind.


Tabelle 16.9   Eigenschaften eines »TextBox«-Objekts

Eigenschaft Beschreibung
AutoCompleteCustomSource Beschreibt eine benutzerdefinierte Liste von Zeichenfolgen, die Grundlage der Autovervollständigung sind. Voraussetzung ist, dass die Eigenschaft AutoCompleteSource auf CustomSource eingestellt ist.
AutoCompleteMode Beschreibt, ob und wie die Autovervollständigung den Anwender unterstützt.
AutoCompleteSource Beschreibt die Quelle der Zeichenfolgen, auf die bei der Autovervollständigung zurückgegriffen wird.
AutoSize Legt einen Wert fest, der angibt, ob die Höhe des Steuerelements automatisch angepasst wird, wenn die dem Steuerelement zugewiesene Schriftart geändert wird (= true).
CharacterCasing Ruft ab oder legt fest, ob das TextBox-Steuerelement die Groß-/Kleinschreibung eingegebener Zeichen ändert.
MaxLength Legt die maximale Anzahl an Zeichen fest oder ruft diese ab, die ein Benutzer in das Textfeld-Steuerelement eingeben kann.
Modified Gibt an, ob sich der Inhalt der Textbox geändert hat.
PasswordChar Legt das Zeichen fest oder ruft es ab, mit dem die Zeichen eines Kennwortes in einem einzeiligen TextBox-Steuerelement maskiert werden.
ReadOnly Legt fest, ob der im Textfeld enthaltene Text schreibgeschützt ist.
SelectedText Ruft den derzeitig markierten Text im Steuerelement ab oder legt diesen fest.
SelectionLength Ruft die Anzahl der im Textfeld markierten Zeichen ab oder legt diese fest.
SelectionStart Ruft die Position der Einfügemarke im Textfeld ab oder legt diese fest.
TextLength Ruft die Länge des Textes im Steuerelement ab.

Methoden eines einzeiligen Textfeldes

Eine Reihe von nützlichen Methoden erleichtert und unterstützt die Programmierung von Textboxen. Dazu gehört die Methode Select, mit der wir Text im Steuerelement markieren können.


public void Select(int start, int length);

Der erste Parameter legt die Position des ersten Zeichens in der aktuellen Textmarkierung des Textfeldes fest, der zweite die Anzahl der zu markierenden Zeichen. Diese Methode erspart uns also die Zuweisung an die beiden Eigenschaften SelectionStart und SelectionLength.

Die Methode SelectAll markiert den gesamten Text im Textfeld:


public void SelectAll();

Möchten Sie, dass der gesamte Inhalt einer Textbox beim Erhalt des Fokus markiert wird, sollten Sie die Methode SelectAll im Enter-Ereignis der Textbox aufrufen:


private void textBox1_Enter(object sender, EventArgs e) {
  textBox1.SelectAll();

Mit der Methode Clear weisen Sie der Text-Eigenschaft eine leere Zeichenfolge zu.

Um den Inhalt einer Textbox zu ergänzen, werden Sie vermutlich meistens eine Anweisung ähnlich der folgenden programmieren:


textBox1.Text += " weiterer Text.";

Die Methode AppendText bietet dazu eine Alternative an:


public void AppendText(string text);

Beispiel:


textBox1.AppendText(" weiterer Text.");

Das TextBox-Steuerelement ist mit der Fähigkeit ausgestattet, in gewohnter Weise die Zwischenablage zu nutzen. Sie müssen dazu nur den Mauszeiger auf markierten Text positionieren und mit der rechten Maustaste das Kontextmenü öffnen. Zum Ausschneiden, Kopieren, Einfügen und Löschen stehen dem Anwender die üblichen Funktionalitäten zur Verfügung, ohne dass Sie dazu auch nur eine Zeile Code schreiben müssen. Alternativ kann der Anwender auch mit den Tastenkombinationen (Strg)+(X)den markierten Text löschen, mit (Strg)+(C) den markierten Text in die Zwischenablage kopieren oder mit (Strg)+(V) den Inhalt der Zwischenablage an der Position der Einfügemarke einfügen.

Mit den Methoden Cut, Copy und Paste können Sie auch direkt im Programmcode mit der Zwischenablage zusammenarbeiten. Mit Cut wird der markierte Text ausgeschnitten und in die Zwischenablage geschoben. Randbedingung ist dabei, dass im Eingabefeld Text markiert ist. Sehr ähnlich arbeitet die Methode Copy, jedoch ohne dabei gleichzeitig den markierten Text auszuschneiden. Soll der Inhalt der Zwischenablage an der Stelle in einer Textbox eingefügt werden, an der sich aktuell die Einfügemarke befindet, müssen Sie die Methode Paste auf dieses Eingabefeld aufrufen. Um die jeweils letzte Operation rückgängig zu machen, rufen Sie Undo auf. Alle vier zuletzt aufgeführten Methoden sind parameterlos und haben auch keinen Rückgabewert.

Zusammenfassung der wichtigsten Methoden eines einzeiligen Eingabefelds

Abschließend sind alle angesprochenen Methoden der Übersicht wegen in der folgenden Tabelle zusammengefasst.


Tabelle 16.10   Methoden der Klasse »TextBox«

Methode Beschreibung
AppendText Hängt an den Inhalt einer Textbox weiteren Text an.
Clear Löscht den gesamten Text.
Copy Kopiert die markierte Auswahl im Textfeld in die Zwischenablage.
Cut Schneidet die aktuelle Auswahl im Textfeld aus und verschiebt sie in die Zwischenablage.
Focus Setzt den Eingabefokus auf das Steuerelement.
Paste Ersetzt markierten Text im Textfeld durch den Inhalt der Zwischenablage.
Select Markiert Text im Steuerelement.
SelectAll Markiert den gesamten Inhalt der Textbox.
Undo Macht die letzte Operation rückgängig.


Galileo Computing

16.6.2 Mehrzeilige Eingabefelder  toptop

Alle Textfelder, die wir bisher in unseren Beispielen eingesetzt haben, hatten ein gemeinsames, kennzeichnendes Charakteristikum: Sie ließen nur eine Textzeile zu. Aus einem einzeiligen ein mehrzeiliges Textfeld zu machen, ist sehr einfach: Sie müssen nur die Eigenschaft MultiLine=true setzen. Danach lässt sich auch die Höhe der Textbox beliebig festlegen, denn die Eigenschaft AutoSize verliert damit selbst dann ihre Wirkung, wenn sie weiterhin true gesetzt ist.

Obschon das vollkommen ausreichend ist, wird das Ergebnis noch nicht ganz die allgemeinen Ansprüche befriedigen können. Gibt der Anwender einen Text ein, wird dieser, sobald er die Breite der Textbox überschreitet, in der nächsten Zeile fortgesetzt. Überschreitet der Text die Höhe der Textbox, verlässt der Text den oberen Teil des Anzeigefensters. Nur mit den Pfeiltasten lässt sich dann zur Laufzeit wieder zum Textanfang navigieren. Gegen dieses Verhalten ist zwar nichts einzuwenden, aber es ist unüblich. Zu einem Quasistandard haben sich daher Bildlaufleisten etabliert. Über die Eigenschaft ScrollBars des Textfeldes kann dies eingestellt werden:


public ScrollBars ScrollBars {get; set;}

In der Enumeration ScrollBars sind die Werte festgelegt, die der gleichnamigen Eigenschaft zugewiesen werden können.


Tabelle 16.11   Mitglieder der Enumeration »ScrollBars«

Member Beschreibung
None Es werden keine Bildlaufleisten angezeigt.
Horizontal Es wird nur eine horizontale Bildlaufleiste angezeigt.
Vertical Es wird nur eine vertikale Bildlaufleiste angezeigt.
Both Es wird sowohl eine horizontale als auch eine vertikale Bildlaufleiste angezeigt.

Wenn Sie der Eigenschaft ScrollBars eines mehrzeiligen Eingabefelds die Einstellung Both oder Horizontal zuweisen, werden Sie feststellen, dass keine horizontale Bildlaufleiste angezeigt wird. Verantwortlich dafür ist die Eigenschaft WordWrap, die zunächst immer true gesetzt ist. Diese Vorgabe bewirkt, dass der eingegebene Text automatisch umbrochen wird, wenn die Textbreite die Breite der Textbox überschreitet.


public bool WordWrap {get; set;}

Hat WordWrap den Wert false, wird auch eine deaktivierte horizontale Bildlaufleiste angezeigt, die erst aktiviert wird, wenn zur Laufzeit die Notwendigkeit dazu besteht.

Die Einstellung WordWrap=false bewirkt, dass der Anwender so lange Text in eine Zeile schreiben kann, bis er mit der (Enter)-Taste einen Zeilenumbruch erzwingt. Durch Scollen der horizontalen Bildlaufleiste kann dann auch der Teil der Zeichenfolge gelesen werden, der den sichtbaren Bereich des Textfeldes verlassen hat.

Als ausgesprochen nützlich kann es sich erweisen, jede einzelne Zeile eines mehrzeiligen Textfeldes abzufragen. Dazu müssen Sie nicht den gesamten Inhalt einer Textbox nach den Zeilenumbrüchen durchsuchen, denn die Eigenschaft Lines nimmt Ihnen diese Arbeit ab:


public string[] Lines {get; set;}

Lines ist vom Typ string-Array. Der Text bis zum ersten Zeilenumbruch wird daher den Index 0 haben, bis zum zweiten Zeilenumbruch den Index 1 usw. Beispielsweise liefert die Anweisung


string str = textBox1.Lines[2]

den Inhalt der dritten Zeile – vorausgesetzt, in der Textbox ist eine solche enthalten. Ansonsten wird eine Ausnahme ausgelöst, die sich dadurch vermeiden lässt, wenn zuvor vorher mit der Eigenschaft Length die Gesamtanzahl der Elemente im Array ermittelt wird, z.B.:


if(textBox1.Lines.Length > 2)
  string str = textBox1.Lines[2];

Sie können über die Eigenschaft Lines einem Eingabefeld auch einen Inhalt zuweisen. Übergeben Sie dazu ein Array mit dem gewünschten Text. Jedes Array-Element wird dann in einer eigenen Zeile angezeigt:


string stadt = "München";
string[] str = new string[]{"Berlin","Hamburg", stadt};
textBox1.Lines = str;

Wollen Sie einer mehrzeiligen Textbox mehrere Zeilen übergeben, müssen Sie sich nicht unbedingt der Lines-Eigenschaft erinnern, denn denselben Effekt erzielen Sie, wenn Sie der Text-Eigenschaft eine Zeichenfolge zuweisen. Allerdings müssen Sie dann mit der Escape-Zeichenfolge \r\n angeben, an welcher Stelle der Zeilenumbruch erfolgen soll:


string str = "Berlin\r\nHamburg\r\nMünchen";
textBox1.Text = str;

Dokumentenfester

Manchmal werden mehrzeilige Textfelder dazu benutzt, den Clientbereich einer Form vollständig auszufüllen. Der MS Editor ist ein Beispiel dafür. Kennzeichnend für Dokumentenfenster ist, dass sich bei einer Vergrößerung der Form die Größe des Textfensters automatisch anpasst.

Unter .NET ist die Lösung dieses Problems geradezu genial einfach. Legen Sie dazu nur die Eigenschaft Dock wie folgt fest:


textBox1.Dock = DockStyle.Fill;

Das ist bereits alles! Die Textbox nimmt danach den gesamten Clientbereich für sich in Anspruch und wird sich dem auch anpassen, sollte der Anwender zur Laufzeit die Größe der Form ändern.

Mehrzeilige Textfelder und die Tastatur

In Forms haben (Tab)- und (Enter)-Taste eine besondere Bedeutung: Mit der (Tab)-Taste bewegt man den Fokus von einem fokussierbaren Steuerelement zum nächsten, mit der Eingabetaste wird üblicherweise die OK-Schaltfläche aktiviert und der Ereignishandler, der mit dem Click-Ereignis verknüpft ist, ausgeführt. Während der Fokuswechsel mit der (Tab)-Taste das Standardverhalten einer Form ist, wird mit der Eigenschaft AcceptButton der Form eine Schaltfläche (meist die OK-Schaltfläche) zur Standardfläche der Eingabetaste erklärt.

Bei mehrzeiligen Textfeldern ist häufig ein anderes Verhalten dieser beiden Tasten wünschenswert. Der Anwender erwartet, dass mit der Eingabetaste ein Zeilenumbruch und mit der Tabulatortaste ein Tabstopp-Zeichen in das Steuerelement eingefügt wird. Damit die beiden Tasten diesen Erwartungen entsprechen, müssen zwei Eigenschaften des TextBox-Objekts auf true gesetzt werden: AcceptsReturn und AcceptsTab. Um mit der Einstellung AcceptsTab=true den Fokus zum nächsten Steuerelement zu verschieben, muss der Anwender nun allerdings die Tastenkombination (Strg)+(Tab) betätigen.

Enthält das Formular keine Schaltfläche, die mit der Eigenschaft AcceptButton der Form zur Standardschaltfläche des Formulars erklärt wird, wirkt sich das Drücken der Eingabetaste unabhängig von der Einstellung der Eigenschaft AcceptsReturn immer als Zeilenumbruch aus.

 << zurück
  
  Zum Katalog
Zum Katalog: Visual C# 2005
Visual C# 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Visual Basic 2005






 Visual Basic 2005


Zum Katalog: Java ist auch eine Insel






 Java ist auch eine
 Insel


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de